package 常用类.String类;
/*
    String、StringBuffer、StringBuilder的比较
    1.StringBuffer和StringBuilder非常类似，军代表可变的字符序列，而且方法也一样的
    2.String：不可变的字符序列，效率低，但是复用率高
    3.StringBuffer：可变字符序列，效率较高，线程安全
    4.StringBuilder:可变字符序列，效率高，线程不安全

    5.String使用的注意说明：
        String s = "ab"; 创建一个字符串
        s += "c";实际上原来的"ab"字符串对象已经被丢弃了，现在又产生了一个字符穿 s +"c"（即"abc"）
        ，如果多次执行这些内容的操作，会导致大量副本字符串对象留在内存中，降低效率，如果放在循环中，会
        极大的响应程序的性能，如果对String做大量的修改，不要使用String
    效率测试：
    StringBuilder > StringBuffer > String

    使用原则：
        1.如果字符串存在大量的修改操作时，一般使用StringBuffer和StringBuilder
        2.如果字符串存在大量的修改操作时，并在单线程的情况下，使用StringBuilder
        3.如果字符串存在大量的修改操作时，并在多线程的情况下，使用StringBuffer
        4.如果字符串很少修改，被多个对象引用，使用String，比如配置信息等

 */
public class String于StringBuffer和StringBuilder {
    public static void main(String[] args) {
        String text = "";
        long startTime = 0L;
        long endTime = 0L;
        StringBuilder stringBuilder = new StringBuilder("");
        StringBuffer stringBuffer = new StringBuffer("");
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 200000; i++) {
            stringBuffer.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer的执行时间：" + (endTime - startTime) / 1000.0 + "s");

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 200000; i++) {
            stringBuilder.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("stringBuilder的执行时间：" + (endTime - startTime) / 1000.0 + "s");

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 200000; i++) {
            text += i;
        }
        endTime = System.currentTimeMillis();
        System.out.println("String的执行时间：" + (endTime - startTime)/1000.0 +"s");

    }
}
